/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package bean;

/**
 *
 * @author carlos
 */
import java.io.Serializable;
import jpa.entities.Produto;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.ResourceBundle;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import jpa.entities.ItemPedido;
import jpa.session.ProdutoFacade;
import jsf.util.JsfUtil;

@ManagedBean(name = "buyManager")
@SessionScoped
@Stateless
public class BuyManager implements Serializable {

    private List<ItemPedido> pedidos = null;
    private ItemPedido pedido = null;
    private int quantidadeTotal = 0;
    private int count = 0;
    private boolean existePedido = false;
    @EJB
    private jpa.session.ItemPedidoFacade ejbFacade;
    @EJB
    private jpa.session.ProdutoFacade ejbProdutoFacade;

    public List<ItemPedido> getList() {
        return pedidos;

    }

    public boolean getExistePedido() {
        if (getQuantidadeTotal() == 0) {
            return false;
        }
        return true;

    }

    public int getQuantidadeTotal() {
        quantidadeTotal = 0;
        if (pedidos != null) {
            for (Iterator<ItemPedido> i = pedidos.iterator(); i.hasNext();) {
                ItemPedido var = i.next();
                quantidadeTotal = quantidadeTotal + var.getQtd();
            }
        }
        if (quantidadeTotal > 0) {
            existePedido = true;

        } else {
            existePedido = false;
        }
        return quantidadeTotal;
    }

    private ProdutoFacade getProdutoFacade() {
        return ejbProdutoFacade;
    }

    public String AdicionarPedido(Produto produto) {

        try {
            count = 0;
            pedido = new ItemPedido();

            if (pedidos == null) {
                pedidos = new ArrayList<ItemPedido>();
            }

            if (!addProduto(produto)) {
                if ((produto.getQuantidade() - 1) >= 0) {
                    pedido.setDataPedido(new Date());
                    pedido.setProduto(produto);
                    pedido.setQtd(1);
                    pedido.setStatusPedido('P');
                    pedidos.add(pedido);
                } else {
                    throw new Exception();
                }

            }
            return null;
        } catch (Exception e) {
            JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("/resources/Bundle").getString("OutOfEstoque"));
            return null;
        }

    }
    public String AdicionarPedido(Integer idProduto) {

        try {
            count = 0;
            pedido = new ItemPedido();
            if (idProduto == 0){
                throw new Exception();
            }

            if (pedidos == null) {
                pedidos = new ArrayList<ItemPedido>();
            }

            Produto prod = getProdutoFacade().find(idProduto);

            if (!addProduto(prod)) {
                
                if ((prod.getQuantidade() - 1) >= 0) {
                    pedido.setDataPedido(new Date());
                    pedido.setProduto(prod);
                    pedido.setQtd(1);
                    pedido.setStatusPedido('P');
                    pedidos.add(pedido);
                } else {
                    throw new Exception();
                }

            }
            return null;
        } catch (Exception e) {
            JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("/resources/Bundle").getString("OutOfEstoque"));
            return null;
        }

    }

    public String destroy(Produto produto) {

        count = 0;
        for (Iterator<ItemPedido> i = pedidos.iterator(); i.hasNext();) {
            ItemPedido var = i.next();
            if (var.getProduto().getIdProduto() == produto.getIdProduto()) {
                    pedidos.remove(count);
                    return "ListCliente";
            }
            count++;
        }
        return "ListCliente";
    }

    public boolean addProduto(Produto produto) throws Exception {

        try {


            count = 0;
            for (Iterator<ItemPedido> i = pedidos.iterator(); i.hasNext();) {
                ItemPedido var = i.next();
                if (var.getProduto().getIdProduto() == produto.getIdProduto()) {
                    Produto prod = getProdutoFacade().find(var.getProduto().getIdProduto());
                    if ((prod.getQuantidade() - pedidos.get(count).getQtd()) > 0) {
                        pedidos.get(count).setQtd(pedidos.get(count).getQtd() + 1);
                        return true;
                    } else {
                        throw new Exception();
                    }
                }
                count++;
            }
        } catch (Exception e) {
            throw e;
        }
        return false;
    }

    public String add(Produto produto) {
        try {
            addProduto(produto);
            return "ListCliente";

        } catch (Exception e) {
            JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("/resources/Bundle").getString("OutOfEstoque"));
            return null;
        }

    }

    public String remove(Produto produto) {

        count = 0;


        for (Iterator<ItemPedido> i = pedidos.iterator(); i.hasNext();) {
            ItemPedido var = i.next();


            if (var.getProduto().getIdProduto() == produto.getIdProduto()) {
                if (pedidos.get(count).getQtd() > 1) {
                    pedidos.get(count).setQtd(pedidos.get(count).getQtd() - 1);

                    return "ListCliente";


                }
            }
            count++;


        }
        return "ListCliente";


    }

    public String removeAll() {

        pedidos.removeAll(pedidos);


        return "ListCliente";

    }
}
